﻿using System;

namespace SeoulOpenApi.Facilities
{
	/// <summary>
	/// 서울시 Open API 문화시설 정보
	/// </summary>
	public class FacilitiesService : BaseService
	{
		/// <summary>
		/// 서울시 API 서비스
		/// </summary>
		public FacilitiesService() : this(null, null) { }

		/// <summary>
		/// 서울시 API 서비스
		/// </summary>
		/// <param name="userId">서울시 API접속 ID</param>
		/// <param name="authKey">서울시로부터 발급받은 인증키</param>
		/// <remarks>인증키 발급: http://mobile.openapi.seoul.go.kr/ </remarks>
		public FacilitiesService(string userId, string authKey)
		{
			base.UserID = userId;
			base.AuthKey = authKey;
		}


		/// <summary>
		/// 서비스 항목에 따라 데이터 가져오기
		/// </summary>
		/// <param name="name">서비스명</param>
		/// <returns></returns>
		protected override SoapData getSoapData(string name)
		{
			var soap = new SoapData { Address = new Uri(ApiUrlPrefix + "FacilitiesService?wsdl", UriKind.Absolute) };
			switch (name)
			{
				case "searchTitleCategoryList":
					soap.Name = "searchTitleCategoryList";
					soap.Description = "문화시설 주제분류 목록 검색";
					soap.SoapBody = "<ns:searchTitleCategoryList xmlns:ns='http://service.facilities.culture.openapi.ubizvalley.com'>" +
									"</ns:searchTitleCategoryList>";
					break;
				case "searchThemeCategoryList":
					soap.Name = "searchThemeCategoryList";
					soap.Description = "문화시설 테마분류 목록 검색";
					soap.SoapBody = "<ns:searchThemeCategoryList xmlns:ns='http://service.facilities.culture.openapi.ubizvalley.com'>" +
									"</ns:searchThemeCategoryList>";
					break;
				case "searchSubjCodeFacilitiesList":
					soap.Name = "searchSubjCodeFacilitiesList";
					soap.Description = "문화시설 주제분류 목록 제공";
					soap.SoapBody = "<ns:searchSubjCodeFacilitiesList xmlns:ns='http://service.facilities.culture.openapi.ubizvalley.com'>" +
									"<ns:subjCode>{0}</ns:subjCode>" + // 변수: 주제분류코드
									"<ns:sortItem>{1}</ns:sortItem>" + // 변수: 정렬기준항목
									"<ns:sortStd>{2}</ns:sortStd>" + // 변수: 정렬기준
									"<ns:cPage>{3}</ns:cPage>" + // 변수: 현재페이지
									"<ns:pageSize>{4}</ns:pageSize>" + // 변수: 한페이지ROW수
									"</ns:searchSubjCodeFacilitiesList>";
					break;
				case "searchThemeCodeFacilitiesList":
					soap.Name = "searchThemeCodeFacilitiesList";
					soap.Description = "문화시설 테마분류 목록 제공";
					soap.SoapBody = "<ns:searchThemeCodeFacilitiesList xmlns:ns='http://service.facilities.culture.openapi.ubizvalley.com'>" +
									"<ns:themeCode>{0}</ns:themeCode>" + // 변수: 주제분류코드
									"<ns:sortItem>{1}</ns:sortItem>" + // 변수: 정렬기준항목
									"<ns:sortStd>{2}</ns:sortStd>" + // 변수: 정렬기준
									"<ns:cPage>{3}</ns:cPage>" + // 변수: 현재페이지
									"<ns:pageSize>{4}</ns:pageSize>" + // 변수: 한페이지ROW수
									"</ns:searchThemeCodeFacilitiesList>";
					break;
				case "searchFacNameFacilitiesList":
					soap.Name = "searchFacNameFacilitiesList";
					soap.Description = "문화시설명 검색";
					soap.SoapBody = "<ns:searchFacNameFacilitiesList xmlns:ns='http://service.facilities.culture.openapi.ubizvalley.com'>" +
									"<ns:facName>{0}</ns:facName>" + // 변수: 문화시설명
									"<ns:sortItem>{1}</ns:sortItem>" + // 변수: 정렬기준항목
									"<ns:sortStd>{2}</ns:sortStd>" + // 변수: 정렬기준
									"<ns:cPage>{3}</ns:cPage>" + // 변수: 현재페이지
									"<ns:pageSize>{4}</ns:pageSize>" + // 변수: 한페이지ROW수
									"</ns:searchFacNameFacilitiesList>";
					break;
				case "searchAddrFacilitiesList":
					soap.Name = "searchAddrFacilitiesList";
					soap.Description = "문화시설명 검색";
					soap.SoapBody = "<ns:searchAddrFacilitiesList xmlns:ns='http://service.facilities.culture.openapi.ubizvalley.com'>" +
									"<ns:addr>{0}</ns:addr>" + // 변수: 문화시설 주소
									"<ns:sortItem>{1}</ns:sortItem>" + // 변수: 정렬기준항목
									"<ns:sortStd>{2}</ns:sortStd>" + // 변수: 정렬기준
									"<ns:cPage>{3}</ns:cPage>" + // 변수: 현재페이지
									"<ns:pageSize>{4}</ns:pageSize>" + // 변수: 한페이지ROW수
									"</ns:searchAddrFacilitiesList>";
					break;
				case "getFacilitiesInfo":
					soap.Name = "getFacilitiesInfo";
					soap.Description = "문화시설 상세 정보 제공";
					soap.SoapBody = "<ns:getFacilitiesInfo xmlns:ns='http://service.facilities.culture.openapi.ubizvalley.com'>" +
									"<ns:facCode>{0}</ns:facCode>" + // 변수: 문화시설코드
									"</ns:getFacilitiesInfo>";
					break;
				case "searchTrafficFacilitiesList":
					soap.Name = "searchTrafficFacilitiesList";
					soap.Description = "문화시설 교통정보 제공";
					soap.SoapBody = "<ns:searchTrafficFacilitiesList xmlns:ns='http://service.facilities.culture.openapi.ubizvalley.com'>" +
									"<ns:facCode>{0}</ns:facCode>" + // 변수: 문화시설코드
									"</ns:searchTrafficFacilitiesList>";
					break;
			}

			// 해당 서비스가 없는 경우
			if (String.IsNullOrEmpty(soap.Name))
				throw new Exception(name + " not found.");

			return soap;
		}
	}
}
